package com.zsh.wanandroid.api;

import com.zsh.wanandroid.bean.ArticleTags;
import com.zsh.wanandroid.bean.BannerBean;
import com.zsh.wanandroid.bean.BaseResult;
import com.zsh.wanandroid.bean.KnowledgeChildren;
import com.zsh.wanandroid.bean.KnowledgeTree;
import com.zsh.wanandroid.bean.LoginResult;
import com.zsh.wanandroid.bean.NavigationBean;
import com.zsh.wanandroid.bean.PageResult;
import com.zsh.wanandroid.bean.ProjectBean;
import com.zsh.wanandroid.bean.ProjectTagsBean;
import com.zsh.wanandroid.bean.ProjectTreeBean;
import com.zsh.wanandroid.bean.RankResult;
import com.zsh.wanandroid.bean.RegisterResult;
import com.zsh.wanandroid.bean.ScoreResult;
import com.zsh.wanandroid.bean.ScoreUserResult;
import com.zsh.wanandroid.bean.ArticleBean;
import com.zsh.wanandroid.bean.WXChapterBean;

import java.util.List;
import java.util.logging.LogRecord;

import io.reactivex.Observable;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;

/**
 * @author zsh
 * @date 2020/3/10.
 * 功能：
 */

public interface ApiService {

    /**
     * 用户登录接口
     *
     * @param username 用户名
     * @param password 密码
     * @return
     */
    @POST("/user/login")
    @FormUrlEncoded
    Call<LoginResult> login(@Field("username") String username,
                            @Field("password") String password);

    /**
     * 用户注册接口
     *
     * @param username   用户名
     * @param password   密码
     * @param rePassword 确认密码
     * @return
     */
    @POST("/user/register")
    @FormUrlEncoded
    Call<RegisterResult> register(@Field("username") String username,
                                  @Field("password") String password,
                                  @Field("repassword") String rePassword);

    /**
     * 退出登录
     *
     * @return
     */
    @GET("/user/logout/json")
    Call<LogRecord> logout();

    /**
     * 获取积分排行榜
     *
     * @param page 页数 从1开始
     * @return
     */
    @GET("/coin/rank/{page}/json")
    Call<RankResult> getRankList(@Path("page") int page);

    /**
     * 获取个人积分，需要登录后访问
     *
     * @return
     */
    @GET("/lg/coin/userinfo/json")
    Call<ScoreUserResult> getUserInfo();

    /**
     * 获取个人积分列表，需要登录后访问
     *
     * @param page 页数 从1开始
     * @return
     */
    @GET("/lg/coin/list/{page}/json")
    Call<ScoreResult> getUserScoreList(@Path("page") int page);

    /**
     * 获取轮播图
     * http://www.wanandroid.com/banner/json
     */
    @GET("/banner/json")
    Call<BaseResult<List<BannerBean>>> getBannersCall();

    @GET("/banner/json")
    Observable<BaseResult<List<BannerBean>>> getBanners();

    /**
     * 获取首页置顶文章列表
     * http://www.wanandroid.com/article/top/json
     */
    @GET("/article/top/json")
    Call<BaseResult<List<ArticleBean<ArticleTags>>>> getTopArticlesCall();

    @GET("/article/top/json")
    Observable<BaseResult<List<ArticleBean<ArticleTags>>>> getTopArticles();

    /**
     * 获取文章列表
     * http://www.wanandroid.com/article/list/0/json
     *
     * @param pageNum
     */
    @GET("/article/list/{pageNum}/json")
    Call<BaseResult<PageResult<ArticleBean<ArticleTags>>>> getArticlesCall(@Path("pageNum") int pageNum);

    @GET("/article/list/{pageNum}/json")
    Observable<BaseResult<PageResult<ArticleBean<ArticleTags>>>> getArticles(@Path("pageNum") int pageNum);

    /**
     * 广场列表数据
     * https://wanandroid.com/user_article/list/0/json
     *
     * @param page 页码拼接在url上从0开始
     */
    @GET("/user_article/list/{page}/json")
    Call<BaseResult<PageResult<ArticleBean<ArticleTags>>>> getSquareList(@Path("page") int page);

    /**
     * 项目数据
     * http://www.wanandroid.com/project/tree/json
     */
    @GET("/project/tree/json")
    Call<BaseResult<List<ProjectTreeBean>>> getProjectTree();

    /**
     * 项目列表数据
     * http://www.wanandroid.com/project/list/1/json?cid=294
     *
     * @param page 页数，默认从第0页开始
     * @param cid
     */
    @GET("/project/list/{page}/json")
    Call<BaseResult<PageResult<ArticleBean<ArticleTags>>>> getProjectList(@Path("page") int page,
                                                                              @Query("cid") int cid);

    /**
     * 获取公众号列表
     * http://wanandroid.com/wxarticle/chapters/json
     */
    @GET("/wxarticle/chapters/json")
    Call<BaseResult<List<WXChapterBean>>> getWXChapters();

    /**
     * 查看某个公众号历史数据
     * http://wanandroid.com/wxarticle/list/405/1/json
     *
     * @param id   公众号 ID
     * @param page 公众号页码
     */
    @GET("/wxarticle/list/{id}/{page}/json")
    Call<BaseResult<PageResult<ArticleBean<ArticleTags>>>> getWXArticles(@Path("page") int page,
                                                                         @Path("id") int id);

    /**
     * 在某个公众号中搜索历史文章
     * http://wanandroid.com/wxarticle/list/405/1/json?k=Java
     *
     * @param id   公众号 ID
     * @param key  搜索关键字
     * @param page 公众号页码
     */
    @GET("/wxarticle/list/{id}/{page}/json?k={key}")
    Call<BaseResult<PageResult<ArticleBean<ArticleTags>>>> queryWXArticles(@Path("id") int id,
                                                                           @Path("page") int page,
                                                                           @Query("k") String key);

    /**
     * 获取知识体系
     * http://www.wanandroid.com/tree/json
     */
    @GET("/tree/json")
    Call<BaseResult<List<KnowledgeTree<KnowledgeChildren>>>> getKnowledgeTree();

    /**
     * 知识体系下的文章
     * http://www.wanandroid.com/article/list/0/json?cid=168
     *
     * @param page
     * @param cid
     */
    @GET("/article/list/{page}/json")
    Call<BaseResult<PageResult<ArticleBean<ArticleTags>>>> getKnowledgeList(@Path("page") int page,
                                                                            @Query("cid") int cid);

    /**
     * 导航数据
     * http://www.wanandroid.com/navi/json
     */
    @GET("/navi/json")
    Call<BaseResult<List<NavigationBean<ArticleBean<ArticleTags>>>>> getNavigationList();

}
